Comment configurer le client VPN WireGuard avec l'interface graphique de NetworkManager

WireGuard est une implémentation de protocole VPN open source qui gagne rapidement en popularité parmi les utilisateurs de VPN en raison de sa vitesse, de sa facilité d'utilisation et de sa base de code bien conçue. Le module de noyau WireGuard est livré avec le noyau Linux principal 5.6 ou une version ultérieure, et ses outils utilisateur sont déjà intégrés dans les référentiels de base de toutes les distributions Linux modernes. Si vous cherchez à configurer un routeur VPN DIY sur un VPS public sous votre contrôle, il n'y a vraiment aucune raison de ne pas essayer WireGuard.

La configuration d'un routeur VPN WireGuard ne nécessite aucune connaissance approfondie du protocole VPN sous-jacent, ni n'implique l'apprentissage d'un langage de configuration cryptique ou l'exploration d'un vaste espace de configuration. Il existe également diverses interfaces conviviales en cours d'élaboration qui simplifient la configuration VPN côté client.

Ce didacticiel se concentre sur la configuration du client VPN WireGuard à l'aide d'un outil de gestion de réseau populaire de choix : l'interface graphique NetworkManager.

Hypothèses

Dans ce didacticiel, je suppose que vous avez déjà configuré un routeur VPN WireGuard quelque part (par exemple, un VPS accessible au public). Si vous ne l'avez pas encore fait, veuillez vous référer au tutoriel suivant pour en configurer un, et revenez à ce tutoriel.

    • Comment configurer le serveur VPN WireGuard sur Ubuntu 20.04

Je suppose également les paramètres suivants.

    • Adresse WAN du serveur VPN WireGuard : 192.168.122.104

    • Port UDP d'écoute du serveur VPN WireGuard : 51820

    • Adresse VPN du serveur VPN WireGuard : 10.0.0.1/24

    • Adresse VPN du client WireGuard VPN : 10.0.0.2/24

Première étape : vérifier l'exigence

Pour que vous puissiez configurer le client VPN WireGuard avec l'interface graphique de NetworkManager, vous avez besoin de NetworkManager avec la version 1.26.2 ou supérieure. Donc avant de continuer, vérifiez d'abord la version de votre NetworkManager. Ubuntu 20.10, Fedora 33 et Arch Linux 2020.09.01 ou version ultérieure répondent à cette exigence. Ce tutoriel n'est donc applicable qu'à l'un de ces environnements de bureau Linux.

Deuxième étape : installer WireGuard

Allez-y et installez WireGuard avec le gestionnaire de packages par défaut.

Pour Ubuntu :

$ sudo apt installer wireguard

Pour Fedora :

$ sudo dnf installer wireguard-tools

Pour Arch Linux :

$ sudo pacman -S wireguard-tools

Troisième étape : créer une paire de clés cryptographiques

Ensuite, créez une paire de clés publique/privée pour le client VPN WireGuard. Pour cela, passons d'abord à la racine. Le reste des étapes du didacticiel sera effectué en tant que root.

$ sudo -i

Utilisez la commande wg pour créer une paire de clés et les stocker dans /etc/wireguard.

# cd /etc/wireguard

# umask 077

# wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Quatrième étape : ajouter la clé publique du client au serveur VPN WireGuard

Pour que le client WireGuard puisse parler au serveur VPN WireGuard, vous devez ajouter explicitement la clé publique du client au serveur VPN. Après tout, WireGuard est un VPN peer-to-peer. Connectez-vous donc à l'hôte du serveur VPN WireGuard et exécutez la commande suivante.

# wg set wg0 peer <client-public-key> allow-ips <client-VPN-address>

Notez que dans cet exemple, l'adresse IP VPN du client est 10.0.0.2.

Cinquième étape : créer une connexion réseau avec l'interface graphique de l'éditeur de connexion de NetworkManager

Ensuite, exécutez nm-connection-editor à partir de la ligne de commande et ajoutez une nouvelle connexion réseau pour WireGuard VPN. Assurez-vous de lancer nm-connection-editor en tant que root car il doit créer un fichier de configuration dans /etc/NetworkManager/system-connections.

# nm-connection-editor

Sur l'interface graphique des connexions réseau, cliquez sur le bouton +.

 
 

NetworkManager version 1.26.2 et supérieure, vous permet de créer une connexion de type WireGuard. Alors allez-y et choisissez WireGuard comme type de connexion.

 
 

Cela ouvrira une fenêtre d'éditeur de connexion comme suit. Dans l'onglet WireGuard, définissez le nom de l'interface sur wg0 et remplissez la clé privée. La clé privée doit provenir du contenu de /etc/wireguard/privatekey que vous venez de créer à l'étape 3. Cliquez ensuite sur le bouton Ajouter en bas, ce qui vous permet de spécifier un serveur VPN WireGuard en tant qu'homologue.

 
 

Sur l'interface graphique de l'éditeur d'homologues WireGuard, remplissez les champs Clé publique, IP autorisées et Point de terminaison. La clé publique doit provenir du serveur WireGuard. Le point de terminaison se compose de l'adresse IP WAN du serveur VPN et du port UDP sur lequel le serveur écoute. Après les avoir remplis, cliquez sur le bouton Appliquer.

 
 

À ce stade, vous verrez le serveur VPN ajouté en tant que peer :

 
 

Ensuite, accédez à l'onglet Paramètres IPv4 et configurez une adresse IP VPN privée à attribuer au client VPN WireGuard, qui est 10.0.0.2/24. En tant que passerelle, spécifiez l'adresse IP VPN du serveur VPN WireGuard, qui est 10.0.0.1/24. Pour les serveurs DNS, vous pouvez choisir n'importe quel serveur DNS public (par exemple, 8.8.8.8). Cliquez sur le bouton Enregistrer.

 
 

Passez maintenant à l'onglet Général et cochez la case à côté de Se connecter automatiquement avec priorité. Cela activera automatiquement cette connexion WireGuard et établira une connexion VPN avec le serveur VPN WireGuard. Cliquez sur le bouton Enregistrer pour finaliser.

 
 

Sixième étape : vérifier la connectivité VPN WireGuard

À ce stade, une connexion VPN WireGuard doit être établie et tout le trafic sortant du client doit être acheminé via le serveur VPN WireGuard.

 
 

Pour vérifier la connectivité VPN WireGuard côté client, vous pouvez essayer de pinger un hôte externe (par exemple, 8.8.8.8) à partir de l'hôte du client. Pour vérifier que le trafic ping est acheminé via le serveur VPN WireGuard, utilisez la commande ip.

# ping 1.1.1.1

# ip route get 1.1.1.1

 
 

La commande ip route get <destination> affiche la route utilisée pour atteindre la destination spécifiée. La sortie de la commande ci-dessus confirme que le trafic destiné à 8.8.8.8 est acheminé via l'interface wg0, pas l'interface WAN de l'hôte.

Une autre façon de vérifier la connectivité VPN consiste à exécuter tcpdump sur l'interface virtuelle wg0 de WireGuard et à vérifier si l'interface voit le trafic de requête et de réponse ICMP généré par la commande ping.

# tcpdump -i wg0

Facultatif : gérer une connexion WireGuard à partir de la ligne de commande

Une fois qu'une connexion WireGuard est créée avec succès avec l'interface graphique de Network Manager, vous pouvez gérer la connexion à partir de la ligne de commande avec nmcli comme suit.

Exécutez simplement nmcli pour voir l'état de la connexion VPN.

# nmcli

 
 

Pour voir les propriétés de connexion détaillées de WireGuard VPN :

# nmcli --overview connection show 'Connexion WireGuard 2'

 
 

Pour démarrer ou arrêter WireGuard VPN :

# nmcli connection down 'Connexion WireGuard 2'

 

# nmcli connection up 'Connexion WireGuard 2'

 
 

Pour vérifier l'état de démarrage automatique de WireGuard VPN :

# nmcli connection show 'Connexion WireGuard 2' | grep autoconnect

 
 

Pour activer/désactiver le démarrage automatique de WireGuard VPN :

# nmcli connection modify 'Connexion WireGuard 2' connection.autoconnect yes

# nmcli connection modify 'Connexion WireGuard 2' connection.autoconnect no

Pour supprimer la connexion VPN WireGuard :

# nmcli connection delete 'Connexion WireGuard 2'

Dépannage VPN WireGuard

Symptôme : vous ne pouvez pas cingler l'adresse IP privée du serveur VPN WireGuard (10.0.0.1).

Solution 1 : vérifier l'accessibilité du port UDP

Assurez-vous que le port d'écoute UDP du serveur VPN est accessible au client. Pour vérifier si c'est le cas, utilisez la commande nc.

# nc -zvu <VPN-server's-WAN-address> <UDP-port>

Dans notre exemple :

# nc -zvu 192.168.122.104 51820

Connection to 192.168.122.240 51820 port [udp/*] succeeded!

Si vous ne pouvez pas atteindre le port UDP, c'est probablement le pare-feu côté serveur qui bloque le trafic entrant vers le port UDP. Assurez-vous d'ouvrir le port dans le pare-feu côté serveur.

Solution 2 : vérifiez si la clé publique du client est ajoutée au serveur VPN

Une autre possibilité est que vous ayez oublié d'ajouter la clé publique du client au serveur VPN WireGuard. Comme décrit à l'étape 4 de ce didacticiel, utilisez la commande wg pour le faire :

# wg set wg0 peer  allowed-ips